/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Com.Sicovi.Controlador;

import Com.Sicovi.DAO.AreaDAO;
import Com.Sicovi.DAO.EmpresaDAO;
import Com.Sicovi.DAO.RegistradorDAO;
import Com.Sicovi.DAO.UsuarioDAO;
import Com.Sicovi.DAO.VisitaDAO;
import Com.Sicovi.DAO.VisitanteDAO;
import Com.Sicovi.Entidad.Area;
import Com.Sicovi.Entidad.Empresa;
import Com.Sicovi.Entidad.Registrador;
import Com.Sicovi.Entidad.Usuario;
import Com.Sicovi.Entidad.Visita;
import Com.Sicovi.Entidad.Visitante;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author darwin
 */
public class SicoviServlet extends HttpServlet {

    UsuarioDAO Udao;
    AreaDAO Adao;
    RegistradorDAO Rdao;
    EmpresaDAO Edao;
    VisitanteDAO Vdao;
    VisitaDAO VstDao;
    @Override
    public void destroy() {
        Udao.CloseEntityManager();
        Adao.CloseEntityManager();
        Rdao.CloseEntityManager();
        Edao.CloseEntityManager();
        Vdao.CloseEntityManager();
        VstDao.CloseEntityManager();
    }

    @Override
    public void init() throws ServletException {
        Udao=new UsuarioDAO();
        Adao=new AreaDAO();
        Rdao=new RegistradorDAO();
        Edao=new EmpresaDAO();
        Vdao=new VisitanteDAO();
        VstDao=new VisitaDAO();
    }
    
    
    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
//        response.setContentType("text/html;charset=UTF-8");
//        PrintWriter out = response.getWriter();
//        try {
//            /* TODO output your page here. You may use following sample code. */
//            out.println("<html>");
//            out.println("<head>");
//            out.println("<title>Servlet SicoviServlet</title>");            
//            out.println("</head>");
//            out.println("<body>");
//            out.println("<h1>Servlet SicoviServlet at " + request.getContextPath() + "</h1>");
//            out.println("</body>");
//            out.println("</html>");
//        } finally {            
//            out.close();
//        }
       
        String operacion=request.getParameter("operacion");
        if (operacion.equalsIgnoreCase("INGRESAR")){
            String login=request.getParameter("txtUsuario");
            String password=request.getParameter("txtPassword");
            
            if(Udao.validarUsuario(login,password)==true){
                response.sendRedirect("SicoviMaster.jsp");
            }else{
                response.sendRedirect("ErrorLogin.jsp");
            }
            
        }
       //operaciones para tabla USUARIO
        else  if (operacion.equalsIgnoreCase("Usuario")){
            response.sendRedirect("OperacionesUsuario.jsp");
        }
        else  if (operacion.equalsIgnoreCase("RegistrarUsuario")){
            response.sendRedirect("InsertarUsuario.jsp");
        }
        else  if (operacion.equalsIgnoreCase("Guardar_Usuario")){
            String dniUser=request.getParameter("txtDniUser");
            String nombreUser=request.getParameter("txtNombreUser");
            String apellidoUser=request.getParameter("txtApellidoUser");
            String login=request.getParameter("txtLoginUser");
            String password=request.getParameter("txtPasswordUser");
            
            Usuario user=new Usuario();
            user.setDni(dniUser);
            user.setNombres(nombreUser);
            user.setApellidos(apellidoUser);
            user.setLogin(login);
            user.setPassword(password);
            user.setEstado(1);
                      
            if (Udao.InsertarUsuario(user)==true){
                response.sendRedirect("exito.jsp");
            }
            else{
                response.sendRedirect("error.jsp");        
            }
        }
        else  if (operacion.equalsIgnoreCase("BuscarUsuario")){
            response.sendRedirect("BuscaUsuario.jsp");
        }
         else  if (operacion.equalsIgnoreCase("VerBusquedaUsuario")){
           String dni=request.getParameter("buscaDniUser");
           List<Usuario> user=Udao.BuscarUsuario(dni);
           if (user.isEmpty()){
               response.sendRedirect("found.jsp");
           }else{
                 request.setAttribute("usuarios", user);
                 RequestDispatcher rd=request.getRequestDispatcher("/VerUsuario.jsp");
                 rd.forward(request, response);

           }
           
        }         
        else  if (operacion.equalsIgnoreCase("ListarUsuario")){
            request.setAttribute("usuarios", Udao.getListarUsuario());
            RequestDispatcher rd=request.getRequestDispatcher("/ListaUsuarios.jsp");
            rd.forward(request, response);
        }
        else  if (operacion.equalsIgnoreCase("EliminarUsuario")){
           int IdUser=Integer.parseInt(request.getParameter("IdUsuario"));
            if (Udao.eliminaUsuario(IdUser)==true)                                                       
               response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");       
           
        }
        
          //operaciones para tabla EMPRESA
        else  if (operacion.equalsIgnoreCase("Empresa")){
            response.sendRedirect("OperacionesEmpresa.jsp");
        }
        else  if (operacion.equalsIgnoreCase("RegistrarEmpresa")){
            response.sendRedirect("InsertarEmpresa.jsp");
        }
        else  if (operacion.equalsIgnoreCase("Guardar_Empresa")){
            String RazonSocial=request.getParameter("txtRazonSocial");
                        
            Empresa e=new Empresa();
            e.setRazonSocial(RazonSocial);
            e.setEstado(1);
                      
            if (Edao.InsertarEmpresa(e)==true){
                response.sendRedirect("exito.jsp");
            }
            else{
                response.sendRedirect("error.jsp");        
            }
        }
        else  if (operacion.equalsIgnoreCase("BuscarEmpresa")){
            response.sendRedirect("BuscaEmpresa.jsp");
        }
        else  if (operacion.equalsIgnoreCase("VerBusquedaEmpresa")){
           String RazonSocial=request.getParameter("buscaEmpresa");
           List<Empresa> emp=Edao.BuscarEmpresa(RazonSocial);
           if (emp.isEmpty()){
               response.sendRedirect("found.jsp");
           }else{
                 request.setAttribute("empresas", emp);
                 RequestDispatcher rd=request.getRequestDispatcher("/VerEmpresa.jsp");
                 rd.forward(request, response);
           }           
        }    
        else  if (operacion.equalsIgnoreCase("ListarEmpresa")){
            request.setAttribute("empresas", Edao.getListarEmpresas());
            RequestDispatcher rd=request.getRequestDispatcher("/ListaEmpresas.jsp");
            rd.forward(request, response);
        }
       
         
        else  if (operacion.equalsIgnoreCase("EliminarEmpresa")){
           int IdEmpresa=Integer.parseInt(request.getParameter("IdEmpresa"));
            if (Edao.eliminaEmpresa(IdEmpresa)==true)                                                       
               response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");       
           
        }
        
         //operaciones para tabla AREA
        else  if (operacion.equalsIgnoreCase("Area")){
            response.sendRedirect("OperacionesArea.jsp");
        }
        else  if (operacion.equalsIgnoreCase("RegistrarArea")){
            response.sendRedirect("InsertarArea.jsp");
        }
        else  if (operacion.equalsIgnoreCase("Guardar_Area")){
            String descArea=request.getParameter("txtDescArea");
                        
            Area a=new Area();
            a.setDescArea(descArea);
            a.setEstado(1);
                      
            if (Adao.InsertarArea(a)==true){
                response.sendRedirect("exito.jsp");
            }
            else{
                response.sendRedirect("error.jsp");        
            }
        }
        else  if (operacion.equalsIgnoreCase("BuscarArea")){
            response.sendRedirect("BuscaArea.jsp");
        }
        else  if (operacion.equalsIgnoreCase("VerBusquedaArea")){
           String descripcion=request.getParameter("buscaArea");
           List<Area> area1=Adao.BuscarArea(descripcion);
           if (area1.isEmpty()){
               response.sendRedirect("found.jsp");
           }else{
                 request.setAttribute("areas", area1);
                 RequestDispatcher rd=request.getRequestDispatcher("/VerArea.jsp");
                 rd.forward(request, response);
           }           
        }    
        else  if (operacion.equalsIgnoreCase("ListarArea")){
            request.setAttribute("areas", Adao.getListarArea());
            RequestDispatcher rd=request.getRequestDispatcher("/ListaAreas.jsp");
            rd.forward(request, response);
        }
       
         
        else  if (operacion.equalsIgnoreCase("EliminarArea")){
           int IdArea=Integer.parseInt(request.getParameter("IdArea"));
            if (Adao.eliminaArea(IdArea)==true)                                                       
               response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");       
           
        }
        
         //operaciones para tabla REGISTRADOR
        else  if (operacion.equalsIgnoreCase("Registrador")){
            response.sendRedirect("OperacionesRegistrador.jsp");
        }
        else  if (operacion.equalsIgnoreCase("RegistrarRegistrador")){
            response.sendRedirect("InsertarRegistrador.jsp");
        }
        else  if (operacion.equalsIgnoreCase("Guardar_Registrador")){
            String dniReg=request.getParameter("txtDniReg");
            String nombreReg=request.getParameter("txtNombreReg");
            String apellidoReg=request.getParameter("txtApellidoReg");
            String telefonoReg=request.getParameter("txtTelefonoReg");
           
            
            Registrador reg=new Registrador();
            reg.setDni(dniReg);
            reg.setNombres(nombreReg);
            reg.setApellidos(apellidoReg);
            reg.setTelefono(telefonoReg);
            reg.setEstado(1);
                      
            if (Rdao.InsertarRegistrador(reg)==true){
                response.sendRedirect("exito.jsp");
            }
            else{
                response.sendRedirect("error.jsp");        
            }
        }
        else  if (operacion.equalsIgnoreCase("BuscarRegistrador")){
            response.sendRedirect("BuscaRegistrador.jsp");
        }
        else  if (operacion.equalsIgnoreCase("VerBusquedaRegistrador")){
           String dniReg=request.getParameter("buscaDniReg");
           List<Registrador> reg=Rdao.BuscarRegistrador(dniReg);
           if (reg.isEmpty()){
               response.sendRedirect("found.jsp");
           }else{
                 request.setAttribute("registradores", reg);
                 RequestDispatcher rd=request.getRequestDispatcher("/VerRegistrador.jsp");
                 rd.forward(request, response);
           }           
        }    
        else  if (operacion.equalsIgnoreCase("ListarRegistrador")){
            request.setAttribute("registradores", Rdao.getListarRegistrador());
            RequestDispatcher rd=request.getRequestDispatcher("/ListaRegistradores.jsp");
            rd.forward(request, response);
        }
       
         
        else  if (operacion.equalsIgnoreCase("EliminarRegistrador")){
           int IdReg=Integer.parseInt(request.getParameter("IdReg"));
            if (Rdao.eliminaRegistrador(IdReg)==true)                                                       
               response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");                  
        }
        
        //operaciones para tabla VISITANTE
        else  if (operacion.equalsIgnoreCase("Visitante")){
            response.sendRedirect("OperacionesVisitante.jsp");
        }
        else  if (operacion.equalsIgnoreCase("RegistrarVisitante")){
            response.sendRedirect("InsertarVisitante.jsp");
        }
        else  if (operacion.equalsIgnoreCase("Guardar_Visitante")){
            String dniVis=request.getParameter("txtDniVis");
            String nombreVis=request.getParameter("txtNombreVis");
            String apellidoVis=request.getParameter("txtApellidoVis");
            String telefonoVis=request.getParameter("txtTelefonoVis");
           
            
            Visitante vis=new Visitante();
            vis.setDni(dniVis);
            vis.setNombres(nombreVis);
            vis.setApellidos(apellidoVis);
            vis.setTelefono(telefonoVis);
            vis.setEstado(1);
                      
            if (Vdao.InsertarVisitante(vis)==true){
                response.sendRedirect("exito.jsp");
            }
            else{
                response.sendRedirect("error.jsp");        
            }
        }
        else  if (operacion.equalsIgnoreCase("BuscarVisitante")){
            response.sendRedirect("BuscaVisitante.jsp");
        }
        else  if (operacion.equalsIgnoreCase("VerBusquedaVisitante")){
           String dniVis=request.getParameter("buscaDniVis");
           List<Visitante> vis=Vdao.BuscarVisitante(dniVis);
           if (vis.isEmpty()){
               response.sendRedirect("found.jsp");
           }else{
                 request.setAttribute("visitantes", vis);
                 RequestDispatcher rd=request.getRequestDispatcher("/VerVisitante.jsp");
                 rd.forward(request, response);
           }           
        }    
        else  if (operacion.equalsIgnoreCase("ListarVisitante")){
            request.setAttribute("visitantes", Vdao.getListarVisitante());
            RequestDispatcher rd=request.getRequestDispatcher("/ListaVisitantes.jsp");
            rd.forward(request, response);
        }
       
         
        else  if (operacion.equalsIgnoreCase("EliminarVisitante")){
           int IdVis=Integer.parseInt(request.getParameter("IdVisitante"));
            if (Vdao.eliminaVisitante(IdVis)==true)                                                       
               response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");                  
        }
        
        //operaciones para tabla visita
        else  if (operacion.equalsIgnoreCase("Visita")){
            response.sendRedirect("OperacionesVisita.jsp");
        }
        else  if (operacion.equalsIgnoreCase("RegistrarEntrada")){
            request.setAttribute("empresas", Edao.getListarEmpresas());
            request.setAttribute("visitantes", Vdao.getListarVisitante());
            request.setAttribute("areas", Adao.getListarArea());
            request.setAttribute("registradores", Rdao.getListarRegistrador());
            RequestDispatcher rd=request.getRequestDispatcher("/RegistrarVisita.jsp");
            rd.forward(request, response);
//            response.sendRedirect("InsertarVisita.jsp");
        }
        else  if (operacion.equalsIgnoreCase("Guardar_Visita")){
            int idEmpresa=Integer.parseInt(request.getParameter("slempresa"));
            int idVisitante=Integer.parseInt(request.getParameter("slvisitante"));
            int idArea=Integer.parseInt(request.getParameter("sldestino"));
            int idRegistrador=Integer.parseInt(request.getParameter("slregistrador"));
            String motivo=request.getParameter("taMotivo");
           
            Empresa emp=new Empresa();
            emp.setIdEmpresa(idEmpresa);
            
            Visitante v=new Visitante();
            v.setIdVisitante(idVisitante);
            
            Area a=new Area();
            a.setIdArea(idArea);
            
            Registrador r=new Registrador();
            r.setIdRegistrador(idRegistrador);
            
            Visita vis=new Visita();
            vis.setIdEmpresa(emp);
            vis.setIdVisitante(v);
            vis.setIdArea(a);
            vis.setIdRegistrador(r);
            vis.setEstado(1);
            vis.setMotivoVisita(motivo);
            vis.setFechaIngreso(new Date());
                      
            if (VstDao.InsertarVisita(vis)==true){
                response.sendRedirect("exito.jsp");
            }
            else{
                response.sendRedirect("error.jsp");        
            }
        }
        else  if (operacion.equalsIgnoreCase("RegistrarSalida")){
            response.sendRedirect("BuscarEntrada.jsp");
        }
        else  if (operacion.equalsIgnoreCase("VerBusquedaEntrada")){
           String dniVist=request.getParameter("buscaDniVis");
           List<Visita> vis=VstDao.BuscarVisita(dniVist);
           if (vis.isEmpty()){
               response.sendRedirect("found.jsp");
           }else{
                 request.setAttribute("entradas", vis);
                 RequestDispatcher rd=request.getRequestDispatcher("/VerEntradas.jsp");
                 rd.forward(request, response);
           }         
        }
        else  if (operacion.equalsIgnoreCase("EditarSalida")){
           int IdEntrada=Integer.parseInt(request.getParameter("IdVisita"));
           request.setAttribute("IdEnt", IdEntrada);
           RequestDispatcher rd=request.getRequestDispatcher("/RegistrarSalida.jsp");
           rd.forward(request, response);
//           response.sendRedirect("RegistrarSalida.jsp");
        }
        else  if (operacion.equalsIgnoreCase("Guardar_Salida")){
            int IdEntrada=Integer.parseInt(request.getParameter("IdEntrada"));
            String ObsSalida=request.getParameter("taObsSal");
            if (VstDao.RegistraSalida(IdEntrada,ObsSalida)==true)                                                       
               response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");                  
        }
//           response.sendRedirect("RegistrarSalida.jsp");
        
        else  if (operacion.equalsIgnoreCase("ListarVisitas")){
            request.setAttribute("visitas", VstDao.getListarVisita());
            RequestDispatcher rd=request.getRequestDispatcher("/ListaVisitas.jsp");
            rd.forward(request, response);
        }
      
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
